In a modern, Internet-enabled computer society, there will be many times when users, companies, and organizations, need to share data and information. Much of this information is shared through the use of Internet or Web-based languages, such as the Hypertext Markup Language (HTML), and the Business Process Execution Language (BPEL). A necessary aspect of sharing information using such languages is that the information must be coded, or the applications must be written, in the corresponding HTML, or BPEL, etc. code. Such applications are typically created using a visual editor, that, for example can present much of the visual layout for the data or application that the end-user will see. However, different organizations typically use different code editors and visual editors; and even within a single organization many of its individual users may use a different visual editor, or a different version of the same visual editor, from one another. Each different visual editor or different version may recognize a different set of features from its peers. When code is shared between one user and the next, and edited by the different users, this can lead to inconsistencies in the eventual code.
For example, consider the situation in which a standards body defines a new standard for a programming language, wherein the programming language allows for new features and extensions to be included. Consider that a first visual editor, Visual Editor A (VEA) introduces a programming language extension, referred to as the coordinate extension, that allows the VEA programmer to record the particular X,Y coordinate position of information in the programming language on the screen display. This is a common situation in ‘visual’ programming languages (for example, workflow languages, unified markup language (UML), etc.). The coordinate extension notation is just for VEA's use and does not affect the actual execution of the program.
Now consider that the programmer takes their code that they just wrote using VEA, and tries to edit it using a second visual editor, Visual Editor B (VEB). VEB knows nothing of VEA's extension. When VEB displays the program graphically it just ignores VEA's extension for purposes of graphical display. This ignore behavior is quite common in programming languages, and in the XML environment is referred to as the “XML ignore rule”.
Now consider that a programmer using VEB copies an object on the screen, and then pastes it twice, wherein each instance of the object contains VEA's extension saying, for example, that the object should show up at a particular X,Y coordinate 10,3. Normally when one copies an object in VEA the new instance of the object receives its own unique screen coordinate. However, in this case VEB had no idea what VEA's extension means, and so blindly copies the extension text. The result is that there are now a total of three copies of the object (the original and the two copies), and each and every one of them has the same value for the VEA coordinate extension—10,3.
Now consider that the programmer returns to using VEA, and asks it to display the code that was edited in VEB. The result will be that all three instances of the object will show up at the exact same position on the screen. The programmer is likely to not even notice the problem until it's too late and their code stops working.
The traditional approach to addressing this problem has been to program the visual edit or environment to ignore objects and features in the code which it does not understand. However, this is not a completely satisfactory solution. For example, if one transfers code back and forth between two platforms, such as between an IBM-based BPEL platform and a BEA-based BPEL platform, then the transfer process can result in duplicate commands being stored in the original code.
Furthermore, as described above, as more organizations use information-sharing techniques such as BPEL, the number and variations of different code editors and visual editors within either a single organization, or within the computer society as a whole is likely to increase. In a more general sense, the ability to share data and information between disparate systems is always increasing. What is needed is a technique that allows for easy sharing and cross-editing of such code, data, and information, in a manner that allows flexibility, while reducing inconsistencies in the eventual code.